@mixin checkbox-fn($checkbox-prefix-cls: unquote('#{$css-prefix}checkbox')) {
  $checkbox-inner-prefix-cls: unquote('#{$checkbox-prefix-cls}-inner');

  .#{$checkbox-prefix-cls}-focus {
    box-shadow: 0 0 0 2px rgba($primary-color, 20%/100%);
    z-index: 1;
  }

  // 普通状态
  .#{$checkbox-prefix-cls} {
    cursor: pointer;
    display: inline-block;
    //outline: none;
    line-height: 1;
    position: relative;
    vertical-align: middle;
    white-space: nowrap;

    &-disabled {
      cursor: $cursor-disabled;
    }

    &:hover {
      .#{$checkbox-inner-prefix-cls} {
        border-color: #bcbcbc;
      }
    }

    &-inner {
      background-color: #fff;
      border: 1px solid $border-color-base;
      border-radius: 2px;
      display: inline-block;
      height: 16px;
      left: 0;
      position: relative;
      top: 0;
      transition: border-color $transition-time $ease-in-out, background-color $transition-time $ease-in-out, box-shadow $transition-time $ease-in-out;
      width: 16px;

      &::after {
        border: 2px solid #fff;
        border-left: 0;
        border-top: 0;
        content: '';
        display: table;
        height: 8px;
        left: 4px;
        position: absolute;
        top: 1px;
        transform: rotate(45deg) scale(0);
        transition: all $transition-time $ease-in-out;
        width: 4px;
      }
    }

    &-large {
      .#{$checkbox-inner-prefix-cls} {
        height: 18px;
        width: 18px;

        &::after {
          height: 9px;
          width: 5px;
        }
      }
    }

    &-small {
      font-size: $font-size-base;
      .#{$checkbox-inner-prefix-cls} {
        height: 14px;
        width: 14px;

        &::after {
          left: 3px;
          top: 0;
        }
      }
    }

    &-input {
      bottom: 0;
      cursor: pointer;
      height: 100%;
      left: 0;
      opacity: 0;
      position: absolute;
      right: 0;
      top: 0;
      width: 100%;
      z-index: 1;

      &[disabled] {
        cursor: $cursor-disabled;
      }
    }

    &-border {
      border: 1px solid $border-color-base;
      border-radius: $btn-border-radius;
      height: $btn-height-base;
      line-height: $btn-height-base - 2px;
      padding: $btn-padding-base;
      transition: border $transition-time $ease-in-out;
    }
    &-small &-border, .#{$checkbox-prefix-cls}-group.#{$checkbox-prefix-cls}-small &-border {
      height: $btn-height-small;
      line-height: $btn-height-small - 2px;
      padding: $btn-padding-small;
    }
    &-large &-border, .#{$checkbox-prefix-cls}-group.#{$checkbox-prefix-cls}-large &-border {
      height: $btn-height-large;
      line-height: $btn-height-large - 4px;
      padding: $btn-padding-large;
    }
  }

  .#{$checkbox-prefix-cls}-wrapper-checked.#{$checkbox-prefix-cls}-border {
    border-color: $primary-color;
  }
  .#{$checkbox-prefix-cls}-wrapper-disabled.#{$checkbox-prefix-cls}-border {
    border-color: $btn-disable-border;
  }

  // 选中状态
  .#{$checkbox-prefix-cls}-checked {
    &:hover {
      .#{$checkbox-inner-prefix-cls} {
        border-color: $primary-color;
      }
    }

    .#{$checkbox-inner-prefix-cls} {
      background-color: $primary-color;
      border-color: $primary-color;

      &::after {
        border: 2px solid #fff;
        border-left: 0;
        border-top: 0;
        content: '';
        display: table;
        height: 8px;
        left: 5px;
        position: absolute;
        top: 2px;
        transform: rotate(45deg) scale(1);
        transition: all $transition-time $ease-in-out;
        width: 4px;
      }
    }
  }
  .#{$checkbox-prefix-cls}-large {
    .#{$checkbox-prefix-cls}-checked {
      .#{$checkbox-inner-prefix-cls} {
        &::after {
          height: 10px;
          width: 6px;
        }
      }
    }
  }
  .#{$checkbox-prefix-cls}-small {
    .#{$checkbox-prefix-cls}-checked {
      .#{$checkbox-inner-prefix-cls} {
        &::after {
          left: 4px;
          top: 1px;
        }
      }
    }
  }

  // 禁用
  .#{$checkbox-prefix-cls}-disabled {
    &.#{$checkbox-prefix-cls}-checked {
      &:hover {
        .#{$checkbox-inner-prefix-cls} {
          border-color: $border-color-base;
        }
      }

      .#{$checkbox-inner-prefix-cls} {
        background-color: #f3f3f3;
        border-color: $border-color-base;

        &::after {
          animation-name: none;
          border-color: #ccc;
        }
      }
    }

    &:hover {
      .#{$checkbox-inner-prefix-cls} {
        border-color: $border-color-base;
      }
    }

    .#{$checkbox-inner-prefix-cls} {
      background-color: #f3f3f3;
      border-color: $border-color-base;

      &::after {
        animation-name: none;
        border-color: #f3f3f3;
      }
    }

    .#{$checkbox-inner-prefix-cls}-input {
      cursor: default;
    }

    span {
      color: #ccc;
      cursor: $cursor-disabled;
    }
  }

  // 半选状态
  .#{$checkbox-prefix-cls}-indeterminate {
    .#{$checkbox-inner-prefix-cls}:after {
      content: '';
      height: 1px;
      left: 2px;
      position: absolute;
      top: 6px;
      transform: scale(1);
      width: 10px;
    }

    &:hover {
      .#{$checkbox-inner-prefix-cls} {
        border-color: $primary-color;
      }
    }
    .#{$checkbox-inner-prefix-cls} {
      background-color: $primary-color;
      border-color: $primary-color;
    }
    &.#{$checkbox-prefix-cls}-disabled {
      .#{$checkbox-inner-prefix-cls} {
        background-color: #f3f3f3;
        border-color: $border-color-base;
      }
      .#{$checkbox-inner-prefix-cls}:after {
        border-color: $input-placeholder-color;
      }
    }
  }
  .#{$checkbox-prefix-cls}-large {
    .#{$checkbox-prefix-cls}-indeterminate {
      .#{$checkbox-inner-prefix-cls}:after {
        top: 7px;
        width: 12px;
      }
    }
  }
  .#{$checkbox-prefix-cls}-small {
    .#{$checkbox-prefix-cls}-indeterminate {
      .#{$checkbox-inner-prefix-cls}:after {
        top: 5px;
        width: 8px;
      }
    }
  }

  .#{$checkbox-prefix-cls}-wrapper {
    cursor: pointer;
    display: inline-block;
    font-size: $font-size-base;
    margin-right: 8px;
    //outline: none;

    &-disabled {
      cursor: $cursor-disabled;
    }

    &.#{$checkbox-prefix-cls}-large {
      font-size: $font-size-large;
    }
  }

  .#{$checkbox-prefix-cls}-wrapper + span,
  .#{$checkbox-prefix-cls} + span {
    //margin-left: 4px;
    margin-right: 4px;
  }

  .#{$checkbox-prefix-cls}-group {
    font-size: $font-size-base;

    &-item {
      display: inline-block;
    }
  }
}
